package com.haust.item.com.sxt.controller;

import com.haust.commons.exception.DaoException;
import com.haust.commons.pojo.HaustResult;
import com.haust.item.com.sxt.service.ItemService;
import com.haust.pojo.TbItem;
import com.haust.pojo.TbItemDesc;
import com.haust.pojo.TbItemParamItem;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

@RestController
@CrossOrigin
public class ItemController {
    @Autowired
    private ItemService itemService;


    /**
     * 订单的步骤：
     * 之：更新商品库存
     * map:     key     value
     *          itemId
     *          num
     *          updated
     *
     * @param params
     * @return
     */
    @PostMapping("/backend/item/updateItemNum4CreateOrder")
    public HaustResult updateItemNum4CreateOrder(@RequestBody List<Map<String, Object>> params) {
        return itemService.updateItemNum4CreateOrder(params);
    }

    @GetMapping("/backend/item/selectTbItemAllByPage")
    public HaustResult selectTbItemAllByPage(@RequestParam(value = "page", defaultValue = "1") Integer page,
                                               @RequestParam(value = "rows", defaultValue = "10") Integer rows) {
        return itemService.selectTbItemAllByPage(page, rows);
    }

    /**
     * 新增商品
     *
     * @param tbItem          商品基本信息
     * @param tbItemDesc      详情图文介绍
     * @param tbItemParamItem 规格与包装
     * @return
     */
    @PostMapping("/backend/item/insertTbItem")
    public HaustResult insertTbItem(TbItem tbItem,
                                      TbItemDesc tbItemDesc,
                                      TbItemParamItem tbItemParamItem) {

        try {
            itemService.insertTbItem(tbItem, tbItemDesc, tbItemParamItem);
        } catch (DaoException e) {
            e.printStackTrace();
            return HaustResult.error("服务繁忙，请稍后再试");
        }
        return HaustResult.ok();
    }

    /**
     * 根据 Id 将 状态设置为  3表示上架删除
     *
     * @param id
     * @return
     */
    @PostMapping("/backend/item/deleteItemById")
    public HaustResult deleteItemById(@RequestParam("id") Long id) {
        try {
            itemService.deleteItemById(id);
        } catch (DaoException e) {
            return HaustResult.error("服务忙，请稍后！");
        }
        return HaustResult.ok();
    }

    /**
     * 根据 Id 将 状态设置为  1表示上架
     *
     * @param id
     * @return
     */
    @PostMapping("/backend/item/onshelfItemById")
    public HaustResult onshelfItemById(@RequestParam("id") Long id) {
        try {
            itemService.onshelfItemById(id);
        } catch (DaoException e) {
            return HaustResult.error("服务忙，请稍后！");
        }
        return HaustResult.ok();
    }


    /**
     * 根据 Id 将 状态设置为  2 表示下架
     *
     * @param id
     * @return
     */
    @PostMapping("/backend/item/offshelfItemById")
    public HaustResult offshelfItemById(@RequestParam("id") Long id) {
        try {
            itemService.offshelfItemById(id);
        } catch (DaoException e) {
            return HaustResult.error("服务忙，请稍后！");
        }
        return HaustResult.ok();
    }


    /**
     * 查询商品之前的 预备更新
     *
     * @param id
     * @return
     */
    @PostMapping("/backend/item/preUpdateItem")
    public HaustResult preUpdateItem(@RequestParam("id") Long id) {
        return itemService.preUpdateItem(id);
    }

    /**
     * 修改 商品信息， tb_item、tb_itemDesc、tb_itemParamItem
     *
     * @param tbItem
     * @param tbItemDesc
     * @param paramData
     * @return
     */
    @PostMapping("/backend/item/updateTbItem")
    public HaustResult updateTbItem(TbItem tbItem,
                                      TbItemDesc tbItemDesc,
                                      String paramData) {
        try {
            return itemService.updateTbItem(tbItem, tbItemDesc, paramData);
        } catch (DaoException e) {
            return HaustResult.error("服务忙，请稍后！");
        }
    }

    @PostMapping("/Haust/item/getAll4Search")
    public HaustResult getAll4Search() {
        return itemService.selectItem4Search();
    }
}
